/**  
 * All rights Reserved, Designed By <a href="www.itttq.com" target="_blank">www.itttq.com</a>
 * @date:   2017-07-21 11:42:21
 * @Copyright: 2017 <a href="www.itttq.com" target="_blank">www.itttq.com</a> Inc. All rights reserved. 
 */
package com.itttq.gshop.generic.connector;

import java.util.List;

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.itttq.gshop.domain.po.UserCartPo;
import com.itttq.gshop.domain.to.ResultPageTo;
import com.itttq.gshop.domain.to.ResultTo;

@FeignClient(name= "${gshop.feign.server.pbpm}/cart")
public interface IUserCartConnector {
	/**
	 * 根据条件获取UserCartPo对象，并返回查询的数据总数
	 * 
	 * @param userCart
	 * @Author 迷蝶
	 * @return ResultPageTo<UserCartPo>
	 */
	@RequestMapping("list")
    public ResultPageTo<UserCartPo> getUserCarts(@RequestBody UserCartPo userCart);
	
	/**
	 * 根据ID获取UserCartPo对象，并放入redis缓存
	 * 
	 * @param id	只能是数字
	 * @Author 迷蝶
	 * @return UserCartPo
	 */
	@RequestMapping("/{id}")
	public UserCartPo getUserCart(@PathVariable("id")int id);
	
	/**
	 * 保存UserCartPo对象，并清除此ID的缓存。<br>
	 * 如果ID存在，则更新对象；ID不存在则插入对象。
	 * 
	 * @param userCart
	 * @Author 迷蝶
	 * @return UserCartPo
	 */
	@RequestMapping("/save")
	public Integer saveUserCart(@RequestBody UserCartPo userCart);
	
	/**
	 * 根据ID删除UserCartPo对象，并清除此ID的缓存。<br>
	 * 
	 * @param id	只能是数字
	 * @Author 迷蝶
	 * @return UserCartPo
	 */
	@RequestMapping("/del/{id}")
	public Integer delUserCart(@PathVariable("id")int id);
	
	/**
	 * 根据用户ID查找此用户购物车所有商品总数
	 * 
	 * @param userId
	 * @Author 迷蝶
	 * @return Integer
	 */
	@RequestMapping("/wareSum/{userId}")
	public Integer getWareSumByUserId(@PathVariable("userId") int userId);
	

	/**
	 * 设置购物车商品数量，前提是购物车商品已经存在
	 * 
	 * @param cartId	购物车ID
	 * @param userId		用户ID
	 * @param number	商品数量。设置之后的数量
	 * @Author 迷蝶
	 * @return ResultTo
	 */
	@RequestMapping("setNumber/{userId}/{cartId}")
	public ResultTo setNumber(@PathVariable("userId")int userId, @PathVariable("cartId")int cartId, 
			@RequestParam("number")int number);
	
	/**
	 * 设置购物车商品数量，购物车商品已经存在则添加数量，不存在则新增
	 * 
	 * @param userId		用户ID
	 * @param username	用户名
	 * @param wareId	商品ID
	 * @param number	商品数量。设置之后的数量
	 * @Author 迷蝶
	 * @return ResultTo
	 */
	@RequestMapping("addNumber/{userId}/{wareId}")
	public ResultTo addNumber(@PathVariable("userId")int userId, @RequestParam("username")String username, 
			@PathVariable("wareId")int wareId, @RequestParam("number")int number);
	
	/**
	 * 根据用户ID和购物车ID查找数据
	 * 
	 * @param userId	用户ID
	 * @param ids		购物车ID数组
	 * @Author 迷蝶
	 * @return List<UserCartPo>
	 */
	@RequestMapping("carts/{userId}")
	public List<UserCartPo> getCartsByUserIdAndIds(@PathVariable("userId") Integer userId, @RequestParam("ids")Integer[] ids);
}